home *** CD-ROM | disk | FTP | other *** search
/ Mac100% 1998 November / MAC100-1998-11.ISO.7z / MAC100-1998-11.ISO / オンラインソフト定点観測 / ユーティリティ / Mops 3.2.sea / Mops 3.2 / Mops source / SpeechStuff folder / Speech < prev    next >
Text File  |  1993-08-21  |  9KB  |  357 lines

  1. ¥ Speech Manager exerciser
  2. ¥ This file requires several things to run.
  3. ¥    1) The new version of "calls" I bundled with this package
  4. ¥    2) The file SpeechMgr
  5. ¥    3) The installation of the Speech Manager extension from Apple.
  6. ¥
  7. ¥ If you have these things, then this program should demonstrate the speech
  8. ¥ capabilites in both the Speech Manager, and, hence, now in Mops.
  9. ¥
  10. ¥ Note that there is little error checking in this file.  If you do not have
  11. ¥ the Speech Manager extension installed, you will more than likely experience
  12. ¥ the system crashing.
  13. ¥
  14. ¥ Greg Haverkamp
  15.  
  16. need Utility Code
  17. need SpeechMgr
  18.  
  19. scon simpleString "This is just a simple string."
  20. scon longString "The Chris Cunningham case poses an interesting motivational problem for the management consultant."
  21. scon voiceTest "The Voice #"
  22. scon RateTest "Demonstrating the setRate feature."
  23. scon PitchTest "Demonstrating the setPitch feature."
  24. scon StopTest "Ridiculously gargantuan words."
  25. scon SentenceTest "Two sentences.  That is what I have."
  26. scon TwoChannels "I can speak on multiple channels."
  27. scon ProsodyCheck "Listen to the end of the sentence."
  28. scon PreflightCheck "Let us check the preflight..."
  29. scon phonemeText "This is a 44 Magnum, the most powerful handgun..."
  30. scon infoCheck "This is a test... this is only a test..."
  31.  
  32. 0 value theObject
  33.  
  34. talker MySpeaker
  35. string theString
  36.  
  37. : ShowVersion
  38.     ." This speech manager version: " SpeechManagerVersion . cr 
  39.     ;
  40.     
  41. : ShowNumberOfVoices
  42.     ." Present number of voices available: " Voices: MySpeaker
  43.     . cr drop
  44.     ;
  45.     
  46. : AmIBusyWithSpeech?
  47.     IsMySpeechBusy? dup
  48.     nif
  49.         ." I am not currently speaking " drop 
  50.     else
  51.         ." I have " . ." speech process(es) busy." 
  52.     then
  53.     cr
  54.     ;
  55.     
  56. : IsAnyoneBusyWithSpeech?
  57.     IsAnySpeechBusy? dup
  58.     nif
  59.         ." No one is trying to speak on this Macintosh." drop
  60.     else
  61.         ." There is/are " . ." speech process(es) in action on this Mac." 
  62.     then
  63.     cr
  64.     ;
  65.     
  66. : SaySimpleString
  67.     ." This is just a simple string." cr
  68.     simpleString put: mySpeaker sayit: mySpeaker drop
  69.     ;
  70.     
  71. : OpenANewChannel ¥ This should be channel 0
  72.     1 getAVoice: mySpeaker NewChannel: mySpeaker drop 
  73.     ;
  74.     
  75. : SpeaktoThisNewChannel
  76.     ." This is a longer string." cr
  77.     longString put: mySpeaker 0 speakToChannel: mySpeaker drop
  78.     ;
  79.     
  80. : LoopAndIsBusy?
  81.     10 0 do
  82.         ."  " AmIBusyWithSpeech? 
  83.         WaitASec 
  84.     loop
  85.     ;
  86.     
  87. : SpeakOfChrisCunningham
  88.     OpenANewChannel
  89.     SpeakToThisNewChannel
  90.     ;
  91. : waitkey
  92.     cr ." Press a <key> to continue" key drop cr cr cr cls ;
  93.     
  94. : Introduction
  95.     cls
  96.     ." Welcome to the Macintosh Speech Manager." cr cr
  97.     ." This demonstration will show some of the features" cr
  98.     ." of the manager, and it will let you know what you can" cr
  99.     ." do with the manager under Mops." cr cr cr
  100.     ." Greg Haverkamp." cr
  101.     ." gh1w@andrew.cmu.edu, dietcoke+@cmu.edu" cr cr cr
  102.     waitkey
  103.     ;
  104.     
  105. : WaitWithCount { / count -- }
  106.     cr cr cr ." I am waiting for this speech to end." 0 -> count
  107.     begin
  108.         1 ++> count count .
  109.         IsMySpeechBusy?
  110.         WaitASec
  111.     nuntil
  112.     ;
  113.     
  114. : Wait
  115.     begin
  116.         IsMySpeechBusy?
  117.     nuntil
  118.     ;
  119.     
  120. : DisposingChannel
  121.     ." To alleviate memory problems, I am disposing of current channel."
  122.     cr
  123.     ;
  124.     
  125. : GettingAVoice ( -- )
  126.     ." I am getting voice #" i . cr
  127.     ;
  128.     
  129. : GettingANewChannel
  130.     ." I am getting a new channel for the above voice."
  131.     cr
  132.     ;
  133.     
  134. : SpeakingToText
  135.     ." Speaking using SpeakText."
  136.     cr
  137.     ;
  138.     
  139. : SpeakingAtRate
  140.     0 getRate: mySpeaker
  141.     ." Speaking rate is " swap . ." and 1/" . drop ." WPM." cr
  142.     ;
  143.     
  144. : SpeakingAtPitch
  145.     0 getRate: mySpeaker
  146.     ." Speaking pitch is " swap . ." and 1/" . drop ." ." cr
  147.     ;
  148.  
  149.     
  150. : DemoVoices
  151.     voices: mySpeaker 1+ swap drop 1 do
  152.         DisposingChannel 0 DisposeChannel: mySpeaker drop
  153.         voiceTest put: theString
  154.         i pad NumberToString add: theString reset: theString
  155.         get: theString put: MySpeaker
  156.         GettingAVoice i getAVoice: mySpeaker drop
  157.         GettingANewChannel NewChannel: mySpeaker drop
  158.         SpeakingToText 0 speakToChannel: MySpeaker drop
  159.         wait    
  160.         cr cr
  161.     loop
  162.     ;
  163.     
  164. : DemoRates
  165.     RateTest put: theString
  166.     print: theString cr cr
  167.     0 DisposeChannel: mySpeaker drop
  168.     1 getAVoice: mySpeaker drop
  169.     NewChannel: mySpeaker drop
  170.     RateTest put: mySpeaker
  171.     200 40 do
  172.         0 0 i setRate: mySpeaker drop
  173.         ." This Rate is: " 0 getRate: mySpeaker . cr drop drop
  174.         0 speaktoChannel: mySpeaker drop wait
  175.     28 +loop
  176.     ;
  177.     
  178. : DemoPitches
  179.     PitchTest put: theString
  180.     print: theString cr cr
  181.     0 DisposeChannel: myspeaker drop
  182.     1 getAVoice: mySpeaker drop
  183.     NewChannel: mySpeaker drop
  184.     PitchTest put: mySpeaker
  185.     130 20 do
  186.         0 0 i setPitch: mySpeaker drop
  187.         ." This pitch is: " 0 getPitch: mySpeaker . cr drop drop
  188.         0 speakToChannel: mySpeaker drop wait
  189.     15 +loop
  190.     ;
  191.  
  192.  
  193. ¥ There seems to be some problems with the stopSpeechAt and the
  194. ¥ PauseSpeechAt functions.  I am not sure what the problem is,
  195. ¥ but I cannot seem to get them to work.
  196. : ShowAStop
  197.     ." We can also selectively halt speech." cr cr
  198.     0 DisposeChannel: myspeaker drop
  199.     1 getAVoice: mySpeaker drop
  200.     NewChannel: mySpeaker drop
  201.     0 0 68 setRate: mySpeaker drop
  202.     stopTest put: mySpeaker
  203.     ." Wait 1 second and stop immediately..." cr
  204.     stopTest type
  205.     0 speakToChannel: mySpeaker drop 1 waitfor#secs
  206.     0 kImmediate pause: mySpeaker drop
  207.     cr cr 1 waitfor#secs 0 continue: mySpeaker drop wait
  208.     ." Wait 1 second and stop at end of word..." cr
  209.     stopTest type
  210.     stopTest put: mySpeaker
  211.     0 speakToChannel: mySpeaker drop 1 waitfor#secs
  212.     0 kEndOfWord pause: mySpeaker drop
  213.     cr cr 2 waitfor#secs 0 continue: mySpeaker drop wait
  214.     ." Wait 1 seconds and stop at end of sentence..." cr
  215.     SentenceTest type
  216.     SentenceTest put: mySpeaker
  217.     0 speakToChannel: mySpeaker drop 1 waitfor#secs
  218.     0 kEndOfSentence pause: MySpeaker drop 2 waitfor#secs 
  219.     0 continue: mySpeaker drop
  220.     cr cr 
  221.     ;
  222.     
  223. : TryTwoVoices
  224.     0 DisposeChannel: myspeaker drop
  225.     1 getAVoice: mySpeaker drop
  226.     NewChannel: mySpeaker drop
  227.     9 GetAVoice: mySpeaker drop
  228.     NewChannel: mySpeaker drop
  229.     ." I am now speaking on channel 0."
  230.     TwoChannels put: mySpeaker 0 speakToChannel: mySpeaker drop
  231.     wait
  232.     cr cr cr ." Now, I am speaking on channel 1."
  233.     TwoChannels put: mySpeaker 1 speakToChannel: mySpeaker drop
  234.     wait
  235.     1 DisposeChannel: mySpeaker drop
  236.     ;
  237.     
  238. : CheckProsody
  239.     0 disposeChannel: mySpeaker drop
  240.     3 getAVoice: mySpeaker drop
  241.     ." Switched to voice #3." cr cr
  242.     NewChannel: mySpeaker drop
  243.     prosodyCheck put: mySpeaker
  244.     ." Speaking without prosody." cr cr
  245.     prosodyCheck type cr cr
  246.     0 kNoEndingProsody SpeakWithOptions: mySpeaker drop wait
  247.     ." Speaking with prosody... Not much difference, eh?" cr cr
  248.     prosodycheck type cr cr
  249.     0 0 SpeakWithOptions: mySpeaker drop wait
  250.     ;
  251.  
  252. : CheckPreFlight
  253.     ." Trying to run with preflight." cr cr
  254.     0 disposeChannel: mySpeaker drop
  255.     2 getAVoice: mySpeaker drop
  256.     newChannel: mySpeaker drop
  257.     PreflightCheck put: MySpeaker
  258.     0 kPreflightThenPause SpeakWithOptions: mySpeaker drop
  259.     ." Pausing." cr cr AmIBusyWithSpeech? 3 waitfor#secs 
  260.     0 continue: mySpeaker drop
  261.     wait
  262.     ;
  263.     
  264. : CheckConvert
  265.     ." This converts our text to phonemes." cr cr
  266.     ." Here is our text:" cr
  267.     phonemeText type cr cr
  268.     ." Here are the phonemes:" cr
  269.     phonemeText put: mySpeaker
  270.     0 TextToPhonemes: mySpeaker
  271.     getPhonemes: mySpeaker type cr cr cr
  272.     ;
  273.     
  274. : ShowTheInfoBlock
  275.     theObject busy?: ** 
  276.     if
  277.         ." Speech is busy." cr
  278.     else
  279.         ." Speech is not busy." cr
  280.     then
  281.     theObject paused?: ** 
  282.     if
  283.         ." Speech is paused." cr
  284.     else
  285.         ." Speech is not paused." cr
  286.     then
  287.     theObject bytesLeft?: **
  288.     . ." bytes left in buffer." cr
  289.     theObject code?: **
  290.     ." Current phoneme code: " . cr
  291.     ;
  292.     
  293.     
  294. ¥ Do note that this is only one of the available tests... See the Speech
  295. ¥ Manager Doc for more info on this.
  296. : CheckGetInfo
  297.     ." This shows the ability to get information about the current speech."
  298.     cr cr
  299.     0 disposeChannel: mySpeaker drop
  300.     1 getAVoice: mySpeaker drop
  301.     newChannel: mySpeaker drop
  302.     InfoCheck put: mySpeaker
  303.     0 speakToChannel: mySpeaker drop waitasec
  304.     0 kImmediate pause: mySpeaker drop 
  305.     0 soStatus GetInfo: mySpeaker
  306.     waitasec 
  307.     -> theObject drop
  308.     ShowTheInfoBlock
  309.     2 waitfor#secs
  310.     0 continue: mySpeaker drop
  311.     waitasec
  312.     0 soStatus GetInfo: mySpeaker
  313.     -> theObject drop
  314.     cr cr cr
  315.     ShowTheInfoBlock
  316.     ;
  317.     
  318. : go
  319.     new: mySpeaker
  320.     Introduction
  321.     ShowVersion
  322.     ShowNumberOfVoices
  323.     AmIBusyWithSpeech?
  324.     IsAnyoneBusyWithSpeech?
  325.     waitkey
  326.     SaySimpleString
  327.     WaitWithCount
  328.     waitkey
  329.     SpeakOfChrisCunningham
  330.     LoopAndIsBusy?
  331.     waitkey
  332.     DemoVoices
  333.     waitkey
  334.     DemoRates
  335.     waitkey
  336.     DemoPitches
  337.     waitkey
  338.  
  339. ¥ I have not been able to get the StopSpeechAt or the
  340. ¥ PauseSpeechAt calls to work properly for me, so I have commented out
  341. ¥ their demos.
  342. ¥    ShowAStop
  343. ¥    waitkey
  344.  
  345.     TryTwoVoices
  346.     waitkey
  347.     CheckProsody
  348.     waitkey
  349.     CheckPreFlight
  350.     waitkey
  351.     CheckConvert
  352.     waitkey
  353.     CheckGetInfo
  354.     waitkey
  355.     cr cr ." That's it for now."
  356.     ;
  357.